package console;

import java.io.File;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Scanner;

public class ConsoleEx1 {

	/**
	 * @param args
	 */
	static String[] argArr;       // 입력한 매개변수를 담기위한 문자열배열 
	static LinkedList q= new LinkedList();// 사용자가 입력한 내용을 저장할 큐(Queue) 
	static final int MAX_SIZE=5;//q(큐)에 저장될 수 있는 값의 개수
	static File curDir;                         // 현재 디렉토리 
	
    static {
        /*
            다음의 코드를 완성하세요.
            1. 시스템속성 "user.dir"값을 읽어서 File객체를 만들고, curDir에 할당하세요.
            2. 1의 코드를 간단히 예외처리하세요.
       */
    	try{
    	curDir=new File(System.getProperty("user.dir"));
    	}catch (Exception e) {
			// TODO: handle exception
    		e.printStackTrace();
		}
   }
	public static void main(String[] args) {
        while(true) { 
        	try{
	            String prompt = curDir.getCanonicalPath() +">>";  //우선, 필요에 따라서 경로명을 절대 형식으로 변환합니다
	            System.out.print(prompt); 
	            
	            /*
	               다음과 같은 내용의 코드를 넣으세요.                  
	               1. 화면으로부터 라인단위로 입력받는다.  - java.util.Scanner클래스 사용
	               2. q 또는 Q를 입력하면 실행종료한다.
	            */
	           
	            Scanner sc= new Scanner(System.in);
	            String an=sc.nextLine();
	            save(an);
	          
	            /*
	            다음의 코드를 완성하세요.
	            1. 입력받은 값에서 앞뒤 공백을 제거한다. (String클래스의 trim()사용)
	            2. 입력받은 명령라인의 내용을 공백을 구분자로 해서 나눠서 argArr에 담는다.
	                String클래스의 split(String regex)를 사용 - 공백이 하나 이상인 경우에도 하나의 공백으로 간주해야함
	                실행결과를 주의깊게 확인하세요.
	        */
	            an=an.trim();
	            argArr=an.split(" +");
	            
	            String command= argArr[0].trim();
	            if("".equals(command)) continue;
	            command = command.toLowerCase();//소문자료 변경.
	            
	            if(an.equalsIgnoreCase("q")){
	            	System.out.print("프로그램을 종료합니다.");
	            	System.exit(0);
	            }else if(command.equals("history")){
	            	history();
	            }else{
	            	for(int i=0; i<argArr.length;i++){
	            		System.out.println(argArr[i]);
	            	}
	            }
        	}catch (Exception e) {
				// TODO: handle exception
			}
       } // while(true)

	}//main
	public static void save(String input){
		if(input==null||"".equals(input)) return;
        /*
        다음의 코드를 완성하세요.
        1. queue에 저장한다. 
        2. queue의 최대크기(MAX_SIZE)를 넣으면 제일 오래된 저장값을 삭제한다. 
         */
		q.add(input);
		
		if(((LinkedList)q).size()>MAX_SIZE){
			q.remove();
		}
	}
	
	public static void history(){
		int i=0;
        /*
        다음의 코드를 완성하세요.
        1. LinkedList에 저장된 내용(최근 MAX_SIZE개의 명령어)을 보여준다. 
         */
		ListIterator it = q.listIterator(); //linkedlist의 내용을 보여준다.
		while(it.hasNext()){
			System.out.println(++i+"."+it.next());
		}
	}

}
